﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;
using Log4Net;

namespace HotelGUI
{
    public partial class ABMRoles : Form
    {
        ISistema sistema =  Dominio.Fabrica.getSistema();
        ILog log = FactoryLogs.getLogInstance();
        String LlenarCamposObligatorios = "Debe llenar todos los datos.";

        public ABMRoles()
        {
            InitializeComponent();
            List<String[]> roles = sistema.traerRoles();
            foreach (String[] rol in roles)
            {
                int n = -10;
                n = dgvRoles.Rows.Add();
                dgvRoles.Rows[n].Cells["idRol"].Value = rol[0];
                dgvRoles.Rows[n].Cells["Nombre"].Value = rol[1];
                dgvRoles.Rows[n].Cells["Activo"].Value = rol[2];
            }

            btnAgregar.Enabled = true;
            btnGuardar.Enabled = false;
        }

        private void limpiarForm()
        {
            txtNombre.Text = "";
            cbEstado.Checked = false;
        }

        private void ABMRoles_Load(object sender, EventArgs e)
        {
            btnAgregar.Enabled = true;
            btnGuardar.Enabled = false;

            List<String[]> roles = sistema.traerRoles();
            foreach (String[] rol in roles)
            {
                int n = -10;
                try
                {
                    n = dgvRoles.Rows.Add();
                    dgvRoles.Rows[n].Cells["idRol"].Value = rol[0];
                    dgvRoles.Rows[n].Cells["Nombre"].Value = rol[1];
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Error Cargando los Roles. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    if (n >= 0)
                        try
                        {
                            dgvRoles.Rows.RemoveAt(n);
                        }
                        catch (Exception ex1)
                        {
                            MessageBox.Show(this, ex1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                }
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (txtNombre.Text != "")
            {
                try
                {
                    int numFila = 0;
                    while (dgvRoles.RowCount > numFila && lblIdRol.Text.Trim() != dgvRoles.Rows[numFila].Cells["idRol"].Value.ToString())
                    {
                        numFila++;
                    }
                    if (numFila != dgvRoles.RowCount)
                    {
                        char estado = 'S';
                        if (cbEstado.Checked)
                            estado = 'N';

                        // Modifica el valor en la base de datos
                        sistema.modificarRol(int.Parse(lblIdRol.Text.Trim()), txtNombre.Text.Trim(), estado);
                        dgvRoles.Rows[numFila].Cells["Nombre"].Value = txtNombre.Text.Trim();
                        dgvRoles.Rows[numFila].Cells["Activo"].Value = estado.ToString();
                        btnAgregar.Enabled = true;
                        btnGuardar.Enabled = false;
                        log.info(sistema.obtenerIdUsuarioLogueado(), "Modificacion de Rol: " + lblIdRol.Text.Trim());
                        limpiarForm();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
                MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (txtNombre.Text != "")
            {
                int n = -10;
                try
                {
                    char estado = 'S';
                    if (cbEstado.Checked)
                        estado = 'N';
                    // Doy de alta el Rol en la base de datos
                    lblIdRol.Text = sistema.altaRol(txtNombre.Text.Trim(), estado).ToString();
                    
                    n = dgvRoles.Rows.Add();
                    dgvRoles.Rows[n].Cells["IdRol"].Value = lblIdRol.Text.Trim();
                    dgvRoles.Rows[n].Cells["Nombre"].Value = txtNombre.Text.Trim();
                    dgvRoles.Rows[n].Cells["Activo"].Value = estado.ToString();
                    log.info(sistema.obtenerIdUsuarioLogueado(), "Creacion de nuevo Rol: " + lblIdRol.Text.Trim());
                    limpiarForm();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    try
                    {
                        dgvRoles.Rows.RemoveAt(n);
                    }
                    catch (Exception ex2)
                    {
                        MessageBox.Show(this, ex2.Message, "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);
                    }
                }
            }
            else
                MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            limpiarForm();
            btnAgregar.Enabled = true;
            btnGuardar.Enabled = false;
        }

        private void dgvRoles_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1)
            {
                return;
            }
            txtNombre.Text = dgvRoles.Rows[e.RowIndex].Cells["Nombre"].Value.ToString();
            lblIdRol.Text = dgvRoles.Rows[e.RowIndex].Cells["IdRol"].Value.ToString();
            if (dgvRoles.Rows[e.RowIndex].Cells["Activo"].Value.ToString() == "N")
                cbEstado.Checked = true;


            btnAgregar.Enabled = false;
            btnGuardar.Enabled = true;
        }

        
    }
}
